home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / comm / bbs / bbbbs85.lha / rexx / Make_BrowseList.baud < prev    next >
Text File  |  1994-08-28  |  9KB  |  351 lines

  1. /* $VER: Make_BrowseList.baud 8.0 (28.8.94)
  2. Copyright ⌐ 1994 Richard Lee Stockton
  3. Places archived, user defined, browselist in user's email
  4. the actual archiving is done by ArcBrowse.rexx or ArcAlpha.rexx
  5. copyright 1991-94 Richard Lee Stockton - FREELY DISTRIBUTABLE -
  6. */
  7.  
  8. MAX_LIBS_FULL=99  /* limit full description libraries to be archived */
  9.  
  10. SIGNAL ON ERROR
  11. SIGNAL ON SYNTAX
  12. SIGNAL ON FAILURE
  13. SIGNAL ON BREAK_C
  14. SIGNAL ON BREAK_E
  15.  
  16. CR='0D'x
  17. def=''
  18. pen3=''
  19.  
  20. name=''
  21. ARG name colorflag totfiles .
  22. IF name='' THEN EXIT 1
  23. IF ADDRESS()~='BAUD' THEN CR=''
  24. IF colorflag~=1 THEN
  25.   DO
  26.     def=''
  27.     pen3=''
  28.   END
  29. IF GETCLIP('BBS_BROWSE')~='' THEN
  30.   DO
  31.     SAY CR
  32.     SAY 'Sorry, the archiver is already in use.  Please try again later.'CR
  33.     EXIT 3
  34.   END
  35. CALL SETCLIP('BBS_BROWSE',name)
  36.  
  37. figarg='s:CONFIG.BBS'
  38. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  39. x=OPEN(f,figarg,'R')
  40. IF x=0 THEN
  41.   DO
  42.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  43.     CALL SETCLIP('BBS_BROWSE')
  44.     EXIT 20
  45.   END
  46.  
  47. lynes.=''
  48. DO i=1 TO 8
  49.   lynes.i=READLN(f)
  50. END
  51. CALL CLOSE(f)
  52.  
  53. compos=POS('/*',lynes.1)
  54. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  55. bbsname = STRIP(lynes.1)
  56.  
  57. sysop   = WORD(lynes.2,1)
  58.  
  59. bbspath = WORD(lynes.6,1)
  60. IF ~EXISTS(bbspath) THEN
  61.   DO
  62.     SAY bbspath 'does not exist!'
  63.     CALL SETCLIP('BBS_BROWSE')
  64.     EXIT 21
  65.   END
  66. testchar=RIGHT(bbspath,1)
  67. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  68.  
  69. libpath = WORD(lynes.8,1)
  70. IF ~EXISTS(libpath) THEN
  71.   DO
  72.     SAY 'The library path, 'libpath', does not exist!'
  73.     CALL SETCLIP('BBS_BROWSE')
  74.     EXIT 22
  75.   END
  76. testchar=RIGHT(libpath,1)
  77. IF testchar~='/' & testchar~=':' THEN libpath=libpath'/'
  78.  
  79. IF ~EXISTS(bbspath'Users/'name) THEN
  80.   DO
  81.     CALL SETCLIP('BBS_BROWSE')
  82.     EXIT 4
  83.   END
  84. pflag=0
  85. line0=0
  86. line1=0
  87. x=OPEN(f,bbspath'Lists/Files','R')
  88. IF x~=0 THEN
  89.   DO
  90.     DO i=1
  91.       line=READLN(f)
  92.       line=WORD(line,1)
  93.       IF line=100 THEN line0=1
  94.       IF line=101 THEN line1=1
  95.       IF WORD(line,1)>101 THEN LEAVE i
  96.     END
  97.     CALL CLOSE(f)
  98.     IF line1 THEN
  99.       DO
  100.         SAY CR
  101.         SAY 'NOTE!  There is a full, complete, up-to-the-minute ALPHABETICAL filelist'CR
  102.         SAY 'available without using this background function. For more info, [B]rowse'CR
  103.         SAY 'file number 101 ("B 101"), or just "Download 101". This list is all files'CR
  104.         SAY 'in the public libraries (excluding the online CD''s), sorted'CR
  105.         SAY 'alphabetically and displayed as one line per file.'CR
  106.         SAY CR
  107.         SAY 'If this file will suffice, PLEASE don''t occupy the BBS''s time by starting'CR
  108.         SAY 'another background archiving process.   Thank you.'CR
  109.         pflag=1
  110.       END
  111.     IF line0 THEN
  112.       DO
  113.         SAY CR
  114.         SAY 'NOTE!  There is a full, complete, up-to-the-minute alphabetical filelist,'CR
  115.         SAY 'SORTED BY LIBRARY, available without using this background function. For'CR
  116.         SAY 'more info, [B]rowse file number 100 ("B 100"), or just "Download 100".'CR
  117.         SAY 'This list contains all files in the public libraries (excluding the online'CR
  118.         SAY 'CD''s), displayed as one line per file, and SORTED BY LIBRARY.'CR
  119.         SAY CR
  120.         SAY 'If this file will suffice, PLEASE don''t occupy the BBS''s time by starting'CR
  121.         SAY 'another background archiving process.   Thank you.'CR
  122.         pflag=1
  123.       END
  124.   END
  125. IF pflag THEN
  126.   DO
  127.     SAY CR
  128.     OPTIONS PROMPT 'Continue? (Ny) > '
  129.     PULL temp
  130.     IF LEFT(temp,1)~='Y' THEN
  131.       DO
  132.         CALL SETCLIP('BBS_BROWSE')
  133.         EXIT 8
  134.       END
  135.   END
  136. SAY CR
  137. SAY 'This background routine will archive selected lists of single-line or'CR
  138. SAY 'full file descriptions from the'pen3 bbsname def'file libraries.'CR
  139. SAY 'The archive will then be saved in email for you.'CR
  140. SAY CR
  141. SAY 'Once you have made your choice of libraries, you will be returned'CR
  142. SAY 'to the main menu(s), and the rest of the process will keep running in'CR
  143. SAY 'the background (ain''t Amiga multi-tasking great?). If the archive'CR
  144. SAY 'is complete before you logout this session, you will be notified online.'CR
  145.  
  146. SAY CR
  147. OPTIONS PROMPT 'Continue? (Ny) > '
  148. PULL temp
  149. IF LEFT(temp,1)~='Y' THEN
  150.   DO
  151.     CALL SETCLIP('BBS_BROWSE')
  152.     EXIT 8
  153.   END
  154.  
  155. /* get level, lastbrowse, & excludes from userfile */
  156. SAY CR
  157. x=OPEN(f,bbspath'Users/'name,'R')
  158. IF x=0 THEN EXIT 24
  159. user.=''
  160. colorflag=1
  161. DO i=1 TO 16 WHILE ~EOF(f)
  162.   line=READLN(f)
  163.   IF i=8 THEN
  164.     IF FIND(line,'COLOR')=0 THEN colorflag=0
  165. END
  166. lastbrowse=STRIP(WORD(line,1))
  167. DO i=17 TO 19 WHILE ~EOF(f)
  168.   line=READLN(f)
  169. END
  170. level=READLN(f)
  171. excludes=READLN(f)
  172. CALL CLOSE(f)
  173.  
  174. x=OPEN(f,bbspath'Numbers/LastFile','R')
  175. IF x=0 THEN
  176.   DO
  177.     CALL SETCLIP('BBS_BROWSE')
  178.     EXIT 25
  179.   END
  180. lastfile=STRIP(READLN(f))
  181. CALL CLOSE(f)
  182.  
  183. IF lastbrowse<lastfile THEN
  184.   DO
  185.     OPTIONS PROMPT 'Archive only NEW file descriptions? (nY) '
  186.     PULL temp
  187.     IF LEFT(UPPER(temp),1)='N' THEN lastbrowse=0
  188.   END
  189. ELSE lastbrowse=0
  190.  
  191. SAY CR
  192. OPTIONS PROMPT 'Single line ['pen3'A'def']lphabetical list or ['pen3'F'def']ull File descriptions? (fA) '
  193. PULL singleflag 
  194. IF singleflag~='F' THEN singleflag='A'
  195. SAY CR
  196. OPTIONS PROMPT 'Sort by ['pen3'L'def']ibrary or ['pen3'A'def']ll files together? (lA) '
  197. PULL libflag 
  198. IF libflag~='L' THEN libflag='A'
  199. SAY CR
  200. OPTIONS PROMPT 'Sort by ['pen3'D'def']ate or ['pen3'A'def']lphabetically? (dA) '
  201. PULL alphaflag 
  202. IF alphaflag~='D' THEN alphaflag='A'
  203.  
  204. SAY CR
  205. SAY 'Hang on while I gather the library list...'CR
  206. x=OPEN(f,bbspath'Lists/Libraries','R')
  207. IF x=0 THEN
  208.   DO
  209.     CALL SETCLIP('BBS_BROWSE')
  210.     EXIT 26
  211.   END
  212. dirs.=''
  213. DO i=1
  214.   line=READLN(f)
  215.   IF EOF(f) | line='END' THEN LEAVE i
  216.   num=WORD(line,1)
  217.   IF DATATYPE(num,'N') THEN
  218.     DO
  219.       num=num%1
  220.       IF num>0 & num<100 THEN dirs.num=WORD(line,2)
  221.     END
  222. END
  223. CALL CLOSE(f)
  224.     
  225. liblist=''
  226. numlist=''
  227. all_libs=''
  228. SAY CR
  229. IF totfiles>500 & singleflag='F' & lastbrowse=0 & MAX_LIBS_FULL=99 THEN
  230.   DO          /* average file desc.= 400 bytes */
  231.     PARSE VERSION . . cpu .
  232.     cpu=RIGHT(cpu,2)/10
  233.     IF cpu<1 THEN cpu=1
  234.     temp=(totfiles+.5)%(7*cpu)
  235.     temp=pen3||temp%60 'hours' temp//60 def'minutes,'
  236.     SAY pen3||CENTER('*** WARNING! ***',75)||def||CR
  237.     SAY 'Archiving' totfiles '['pen3'F'def']ull descriptions may take' temp 'and make'CR
  238.     SAY 'a textfile'pen3 comma(totfiles*400) def'bytes in size. Are you SURE that''s what you want?'CR
  239.   END
  240. IF MAX_LIBS_FULL=99 | singleflag='A' | lastbrowse>0 THEN
  241.   DO
  242.     OPTIONS PROMPT 'Archive file descriptions from ALL available libraries? (Ny) '
  243.     PULL all_libs
  244.     SAY CR
  245.   END
  246. IF LEFT(all_libs,1)='Y' THEN
  247.   DO i=1 TO 99
  248.     IF i>level THEN LEAVE i
  249.     IF dirs.i='' THEN ITERATE i
  250.     IF FIND(UPPER(excludes),UPPER(dirs.i))>0 THEN ITERATE i
  251.     numlist=STRIP(numlist i)
  252.     liblist=STRIP(liblist dirs.i)
  253.   END
  254. ELSE CALL chdir()
  255. SAY CR
  256. IF liblist='' | numlist='' THEN
  257.   DO
  258.     CALL SETCLIP('BBS_BROWSE')
  259.     EXIT 4
  260.   END
  261. SAY 'Archiving...'CR
  262. SAY 'When completed, the archive will be attached to email addressed to you.'CR
  263. SAY CR
  264. IF singleflag='A' THEN
  265.   ADDRESS AREXX ArcAlpha.rexx name lastbrowse alphaflag libflag numlist
  266. ELSE ADDRESS AREXX ArcBrowse.rexx name lastbrowse alphaflag libflag liblist
  267. EXIT 0
  268.  
  269.  
  270. chdir:
  271. string=''
  272. SAY CR
  273. SAY 'Enter a space separated list of library NUMBERS to be archived.'CR
  274. SAY pen3||LEFT('-',75,'-')||def||CR
  275. lns=GETCLIP('BBS_libs.0')
  276. IF ~DATATYPE(lns,'W') THEN
  277.   DO
  278.     SAY 'Library clip failed!  Please inform sysop.'CR
  279.     CALL SETCLIP('BBS_BROWSE')
  280.     EXIT 3
  281.   END
  282. DO i=1 TO lns
  283.   SAY GETCLIP('BBS_libs.'i)||CR
  284. END
  285. OPTIONS PROMPT pen3'Library Numbers: 'def
  286. PULL dirnums
  287. IF dirnums='' THEN RETURN
  288. maxdirs=WORDS(dirnums)
  289. IF totfiles>500 & singleflag='F' & lastbrowse=0 & maxdirs>MAX_LIBS_FULL THEN
  290.   DO
  291.     SAY CR
  292.     SAY 'You are only allowed to archive full descriptions for'CR
  293.     SAY MAX_LIBS_FULL 'complete file libraries at once.  Ignoring extras...'CR
  294.     SAY CR
  295.     maxdirs=MAX_LIBS_FULL
  296.   END
  297. DO i=1 TO maxdirs
  298.   dirnum=WORD(dirnums,i)
  299.   IF ~DATATYPE(dirnum,'W') | dirnum<1 | dirnum>99 THEN ITERATE i
  300.   IF dirs.dirnum='' THEN
  301.     DO
  302.       SAY pen3'Library number' dirnum 'is currently un-assigned.'def||CR
  303.       ITERATE i
  304.     END
  305.   IF dirnum>level | FIND(data.21,UPPER(dirs.dirnum))>0 THEN
  306.     DO
  307.       SAY pen3'You do not have authorization for library' dirnum'!'def||CR
  308.       ITERATE i
  309.     END
  310.   numlist=STRIP(numlist dirnum)
  311.   liblist=STRIP(liblist dirs.dirnum)
  312. END
  313. SAY CR
  314. IF liblist='' THEN RETURN
  315. SAY pen3'The following file libraries will be included.'def||CR
  316. DO i=1 TO WORDS(liblist)
  317.   SAY RIGHT(WORD(numlist,i),3)'.' WORD(liblist,i)
  318. END
  319. SAY CR
  320. OPTIONS PROMPT 'Ready to begin archiving? (nY) > '
  321. PULL temp
  322. IF LEFT(STRIP(temp),1)~='N' THEN RETURN
  323.  
  324. ERROR:
  325. SYNTAX:
  326. FAILURE:
  327. BREAK_C:
  328. BREAK_E:
  329. CALL SETCLIP('BBS_BROWSE')
  330. EXIT 4
  331.  
  332.  
  333. comma:
  334. ARG num .
  335. dgt=LENGTH(num)
  336. numtext=''
  337. IF dgt>3 THEN numtext=','RIGHT(num,3)
  338. IF dgt>6 THEN numtext=','LEFT(RIGHT(num,6),3)||numtext
  339. IF dgt>9 THEN
  340.   DO
  341.     numtext=','LEFT(RIGHT(num,9),3)||numtext
  342.     numtext=LEFT(num,dgt-9)||numtext
  343.   END
  344. ELSE IF dgt>6 THEN numtext=LEFT(num,dgt-6)||numtext
  345. ELSE IF dgt>3 THEN numtext=LEFT(num,dgt-3)||numtext
  346. ELSE numtext=num
  347. RETURN(numtext)
  348.  
  349.  
  350. /* end of Make_BrowseList.rexx */
  351.